import unittest
from common.base import get_driver
from page.index_page import IndexPage
from page.register_page import RegisterPage
from selenium.webdriver.common.by import By
import time
import re


class SingleElementTestCase(unittest.TestCase):
    # 打开网址
    @classmethod
    def setUpClass(cls) -> None:
        # 创建浏览器对象，打开浏览器
        driver = get_driver()
        # 请求测试网址
        driver.get(RegisterPage.register_url)
        cls.register = RegisterPage(driver)
        cls.index = IndexPage(driver)

    def test_01_username(self):
        # TODO 操作流程'
        # time.sleep(1)
        # expect_username = 'fff12'
        # 输入用户名
        self.register.input_username('fff12')
        # 点击右上角的关键字输入框，使用户名输入框失去焦点
        self.register.click((By.NAME, 'extend_field2'))
        time.sleep(3)
        # TODO 断言，在用户名输入框右边出现《* 可以注册》信息，视为注册用户名符合规定
        # 预期结果 与 实际结果的对比
        # 定位实际结果
        actual_username_notice = self.register.username_notice()
        self.assertEqual('* 可以注册', actual_username_notice, msg='用户名不符合规定')

    def test_02_email(self):
        # TODO 操作流程'
        # 输入邮箱
        self.register.input_email('fff12@163.com')
        # 点击右上角的关键字输入框，使用户名输入框失去焦点
        self.register.click((By.NAME, 'extend_field2'))
        time.sleep(3)
        # TODO 断言，在email输入框右边出现《* 可以注册》信息，视为注册email符合规定
        # 预期结果 与 实际结果的对比
        # 定位实际结果
        actual_email_notice = self.register.email_notice()
        self.assertEqual('* 可以注册', actual_email_notice, msg='邮箱地址不符合规定')

    def test_03_password(self):
        # TODO 操作流程'
        # 输入密码
        self.register.input_password('123456')
        # 点击右上角的关键字输入框，使用户名输入框失去焦点
        self.register.click((By.NAME, 'extend_field2'))
        time.sleep(3)
        # TODO 断言，在密码输入框右边出现《* 可以注册》信息，视为注册密码符合规定
        # 预期结果 与 实际结果的对比
        # 定位实际结果
        actual_password_notice = self.register.password_notice()
        self.assertEqual('* 可以注册', actual_password_notice, msg='设置的密码不符合规定')

    def test_04_conform_password(self):
        # TODO 操作流程'
        # 输入密码
        self.register.input_conform_password('123456')
        # 点击右上角的关键字输入框，使用户名输入框失去焦点
        self.register.click((By.NAME, 'extend_field2'))
        time.sleep(3)
        # TODO 断言，在确认密码输入框右边出现《* 可以注册》信息，视为注册密码符合规定
        # 预期结果 与 实际结果的对比
        # 定位实际结果
        actual_conform_password_notice = self.register.conform_password_notice()
        self.assertEqual('* 可以注册', actual_conform_password_notice, msg='确认密码不符合规定')

    def test_05_phone(self):
        # TODO 操作流程'
        # 输入手机号码
        self.register.input_phone('17716473588')
        # 点击右上角的关键字输入框，使用户名输入框失去焦点
        self.register.click((By.NAME, 'extend_field2'))
        time.sleep(3)
        # TODO 断言，输入的手机号码为11位数字，符合下面正则表达式的，视为注册手机号码符合规定
        # 预期结果 与 实际结果的对比
        # self.assertEqual(re.search('^1[3-9]\d{9}$'), '13890894573', msg='手机号码不符合规定')
        self.assertTrue(re.search('^1[3-9]\d{9}$', '17716473588'))

    def test_06_submit(self):
        # TODO 操作流程'
        # 点击《立即注册》按钮
        self.register.input_submit()
        # TODO 断言，在index界面的左上角的用户名和注册的用户名一致
        # 预期结果 与 实际结果的对比
        # 定位实际结果
        actual_username = self.index.font_username_text()
        self.assertEqual('fff12', actual_username, msg='断言index界面左上角的用户名与注册用户名一致')

    # def tearDown(self) -> None:
    #     self.index.a_logout()
    #     self.index.a_register()
    def test_07_logout(self):
        # 退出登录
        time.sleep(3)
        self.index.a_logout()

    @classmethod
    def tearDownClass(cls) -> None:
        # 退出浏览器
        cls.register.quit(3)


if __name__ == '__main__':
    unittest.main(verbosity=2)
